package org.apache.cordova.pluginutils;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.telephony.PhoneNumberUtils;
import android.util.Log;

public class PhonePlugin extends CordovaPlugin {
	private static final int PHONE_CALL = 0;
	private static final int PHONE_SMS = 0;
	private CallbackContext callbackContext;

	@Override
	public boolean execute(String action, JSONArray data,
			CallbackContext callbackContext) throws JSONException {
		this.callbackContext = callbackContext;
		/*
		 * action字符是从phoneplugin.js传过来的，用于区分业务 处理 ，比如call执行拨打电话方法， 妨行发短信方法
		 * data是从前端传过来的参数，callbackContext为回调对象
		 */
		if (action.equals("call")) {
			Log.e("plugintest", data.get(0).toString());
			call(data.get(0).toString(), callbackContext);
			return true;
		} else if (action.equals("sms")) {
			Log.e("plugintest", "sms");
			sms(data.get(0).toString(), callbackContext);
			return true;
		}
		callbackContext.error("失败");
		return false;
	}

	/*
	 * ACTION_CALL 根据指明的信息向某人拨打电话。
	 * 输入：如果为空，启动一个空的拨号界面；如果不为空，通过getData
	 * ()方法获取一个手机号码或者电话号码的URI进行拨号：URI是一个显示的手机号码。
	 * 注：应用在初始化一个拨号事件时会受到一些限制；大部分的应用可以使用ACTION_CALL。
	 * 注：这个intent不能用于进行紧急呼叫拨号。然而，应用程序可以通过ACTION_DIAL进行紧急呼叫拨号。
	 * 常量值："android.intent.action.CALL"
	 * 
	 * ACTION_CALL_BUTTON 
	 * Activity Action：用户点击拨号按钮进入拨号界面，或者其他适当的可以代替拨号界面的UI界面。
	 * 常量值："android.intent.action.CALL_BUTTON"
	 * 资料参考：
	 * http://fsh430623.iteye.com/blog/1848687
	 * http://www.oschina.net/question/157182_46417
	 */
	private void call(String phonenumber, CallbackContext callbackContext) {
		if (phonenumber != null && phonenumber.length() > 0) {
			if (PhoneNumberUtils.isGlobalPhoneNumber(phonenumber)) {
				//Intent intent = new Intent();
				//intent.setAction(Intent.ACTION_CALL);
				//intent.setData(Uri.parse("tel:" + phonenumber));
				Uri uri = Uri.parse("tel:" + phonenumber);  
				Intent intent = new Intent(Intent.ACTION_DIAL, uri); 
				this.cordova.startActivityForResult(this, intent, PHONE_CALL);
			} else {
				callbackContext.error(phonenumber + "不是有效的电话号码");
			}
		} else {
			callbackContext.error("电话号码不能为空");
		}

	}

	private void sms(String phonenumber, CallbackContext callbackContext) {
		if (phonenumber != null && phonenumber.length() > 0) {
			if (PhoneNumberUtils.isGlobalPhoneNumber(phonenumber)) {
				Uri uri = Uri.parse("smsto:" + phonenumber);
				Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
				this.cordova.startActivityForResult(this, intent, PHONE_CALL);
			} else {
				callbackContext.error(phonenumber + "不是有效的电话号码");
			}

		} else {
			callbackContext.error("电话号码不能为空");
		}

	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent intent) {
		if (requestCode == Activity.RESULT_OK) {
			if (requestCode == PHONE_CALL) {
				this.callbackContext.success("拨打电话成功");
			} else if (requestCode == PHONE_SMS) {
				this.callbackContext.success("发短信成功");
			} else {
				this.callbackContext.error("未知状态");
			}

		} else if (resultCode == Activity.RESULT_CANCELED) {
			try {
				if (requestCode == PHONE_CALL) {
				} else if (requestCode == PHONE_SMS) {
				} else {
					this.callbackContext.error("未知状态");
				}
			} catch (Exception e) {
				this.callbackContext.error(e.getMessage());
			}
		}
		super.onActivityResult(requestCode, resultCode, intent);
	}
}
